package day03;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

/**
 * 实现时间的计算: 要求用户输入身份证号，若格式有误，要求其重新输入。然后根据身份证号码输出20岁生日
 * 所在周的周三的日期。
 * 例如:
 * 出生日期:1992-07-15。
 * 20岁生日:2012-07-15
 * 当周的周三为:2012-07-18
 * @author Bonnie
 *
 */
//452724 20010125 0035
public class Test05 {
    public static void main(String[] args) {
        //已限制月份，日期仅限制了十位数
        String regex = "\\d{6}\\d{4}[01]\\d[0123]\\d\\d{3}[\\dX]";
        Scanner scanner = new Scanner(System.in);
        //先获取第一次输入
        String getIn = scanner.next();
        while (!getIn.matches(regex)){
            //不满足时循环提示输入，直到输入格式正确
            System.out.println("格式错误，请重新输入!");
            getIn = scanner.next();
        }
        //符合格式结束循环，开始进行截取
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        Date birthday = new Date();
        try {
            birthday = sdf.parse(getIn.substring(6, 14));
        } catch (ParseException e) {
            System.out.println("出问题了");
        }
        //推算时间
        SimpleDateFormat sdfOut = new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal = Calendar.getInstance();
        cal.setTime(birthday);
        cal.add(Calendar.YEAR, 20);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
        System.out.println("生日周周三为: " + sdfOut.format(cal.getTime()));
    }
}
